package com.net.framework.help.db;

import android.content.Context;

import com.baby.sqlite.orm.SQLiteOrm;
import com.baby.sqlite.orm.db.model.ColumnsValue;
import com.baby.sqlite.orm.db.model.ConflictAlgorithm;

import java.util.ArrayList;


/**
 * @author zhangxiaobin
 * @version 1.1.0
 * @email zhangxiaobin@yipintech.com
 * @date 创建时间：2015年7月6日 下午9:34:35
 * @explain 实例SQLite数据库
 */
public class DBinitialize {
    private static SQLiteOrm liteOrm;

    /***
     * 实例化SQLiteOrm，返回一个SQLiteOrm
     *
     * @param context
     * @return
     */
    private static SQLiteOrm getInstanceDB(Context context, String dbName) {
        // TODO Auto-generated method stub
        if (null == liteOrm) {
            liteOrm = SQLiteOrm.newSingleInstance(context, dbName);
            liteOrm.setDebugged(true);
        }
        return liteOrm;
    }

    /***
     * 将数据存储到本地数据库
     *
     * @param context
     * @param object  需要存入的对象
     */
    public static void saveObject(Context context, String dbName, Object object) {
        DBinitialize.getInstanceDB(context, dbName).save(object);
    }

    /***
     * 删除
     *
     * @param context
     * @param object
     */
    public static void deleteObject(Context context, String dbName, Object object) {
        DBinitialize.getInstanceDB(context, dbName).delete(object);
    }

    /***
     * 取出保存的对象数据
     *
     * @param context
     * @param clazz
     * @return
     */
    public static <T> Object queryObject(Context context, String dbName, Class<T> clazz) {
        ArrayList<T> result_lsit = queryList(context, dbName, clazz);
        if (result_lsit.size() > 0) {
            return queryList(context, dbName, clazz).get(0);
        }
        return null;
    }

    public static <T> long queryCount(Context context, String dbName, Class<T> clazz) {
        return DBinitialize.getInstanceDB(context, dbName).queryCount(clazz);
    }

    /***
     * 取出保存的list对象
     *
     * @param context
     * @param clazz
     * @return
     */
    public static <T> ArrayList<T> queryList(Context context, String dbName, Class<T> clazz) {
        ArrayList<T> result_lsit = DBinitialize.getInstanceDB(context, dbName).query(clazz);
        return result_lsit;
    }

    /**
     * 更新
     *
     * @param context 上下文
     * @param object  需要更新的对象
     */
    public static void update(Context context, String dbName, Object object) {
        DBinitialize.getInstanceDB(context, dbName).update(object);
    }

    /***
     * 更新指定对象中的某一个元素
     *
     * @param context   上下文
     * @param object    需要更新的对象
     * @param updataKey 需要更新的元素名称
     */
    public static void update(Context context, String dbName, Object object, String updataKey) {
        ColumnsValue cv = new ColumnsValue(new String[]{updataKey});
        DBinitialize.getInstanceDB(context, dbName).update(object, cv, ConflictAlgorithm.Replace);
    }
}
